/*
 * $Id: log.cpp 9ce65bed8ef4 2012/08/26 02:14:51 pgurumur $
 * Copyright (c) 2012 Prabhu Gurumurthy <pgurumur@gmail.com>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *

 * __version__  = "$Revision: 9ce65bed8ef4 $"
 * __author__   = "$Author: pgurumur $"
 * __modified__ = "$Date: 2012-08-26 02:14:51Z $"
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <syslog.h>

#include "consts.h"
#include "log.h"

Log::Log(const char *program, int &facility) : _program(program)
{
   if (facility) {
      openlog(_program.c_str(), LOG_PID | LOG_NDELAY, facility);
   }
}


Log::~Log()
{
   closelog();
}

void Log::_logit(int level, const char *fmt, va_list args)
{
   char buffer[MaxLine];
   memset(buffer, '\0', MaxLine);

   vsnprintf(buffer, MaxLine, fmt, args);
   syslog(level, "%s", buffer);
}

void Log::emergency(const char *fmt, ...)
{
   va_list ap;
   va_start(ap, fmt);
   _logit(LOG_EMERG, fmt, ap);
   va_end(ap);
}

void Log::alert(const char *fmt, ...)
{
   va_list ap;
   va_start(ap, fmt);
   _logit(LOG_ALERT, fmt, ap);
   va_end(ap);
}

void Log::critical(const char *fmt, ...)
{
   va_list ap;
   va_start(ap, fmt);
   _logit(LOG_CRIT, fmt, ap);
   va_end(ap);
}

void Log::error(const char *fmt, ...)
{
   va_list ap;
   va_start(ap, fmt);
   _logit(LOG_ERR, fmt, ap);
   va_end(ap);
}

void Log::warn(const char *fmt, ...)
{
   va_list ap;
   va_start(ap, fmt);
   _logit(LOG_WARNING, fmt, ap);
   va_end(ap);
}

void Log::notice(const char *fmt, ...)
{
   va_list ap;
   va_start(ap, fmt);
   _logit(LOG_NOTICE, fmt, ap);
   va_end(ap);
}

void Log::info(const char *fmt, ...)
{
   va_list ap;
   va_start(ap, fmt);
   _logit(LOG_INFO, fmt, ap);
   va_end(ap);
}

void Log::debug(const char *fmt, ...)
{
   va_list ap;
   va_start(ap, fmt);
   _logit(LOG_EMERG, fmt, ap);
   va_end(ap);
}

